<?php


namespace app\http\middleware;


use app\model\ApikeyModel;
use app\Request;
use think\facade\Config;
use think\facade\Log;
use think\Response;

class AllowApikey
{
    /**
     * @param Request $request
     * @param \Closure $next
     * @return Response
     */
    public function handle(Request $request, \Closure $next)
    {
        // 获取 API 请求中的 API 密钥参数
        $apiKey = $request->param(['apikey']);
        // 在后台数据库中查找对应的 API 密钥记录
        $apiRecord = ApikeyModel::where(['apikey'=>$apiKey])->find();
        // 验证 API 密钥是否有效
        if ($apiRecord && $apiRecord['status'] == '1') {
            // 如果 API 密钥验证通过，则允许访问 API 接口
            // ...
        } else {
            // 如果 API 密钥验证不通过，则返回错误信息，拒绝访问
            return error('密钥已失效');
        }
        // 记录 API 访问日志
        $logData = array(
            'apiKey' => $apiKey,
            'requestUri' => $_SERVER['REQUEST_URI'],
            'requestTime' => time(),
            'remoteAddr' => $_SERVER['REMOTE_ADDR'],
            'responseCode' => http_response_code(),
        );
        Log::write('第三方接口请求'.json_encode($logData));
        return $next($request);
    }
}